﻿/**
 * 二维窗口封装表格和曲线
 * @file   GUICurvePlotDialog.h
 * @brief  
 * @author WangZhenYu (wangzhenyu@diso.cn)
 * @date   2024-11-26
 * 
 */
#ifndef GUICURVEPLOTDIALOG_H
#define GUICURVEPLOTDIALOG_H

#include <QDialog>
#include <QStringList>
#include <QTableWidget>
#include "GUIPostDialogAPI.h"
namespace Ui {
class GUICurvePlotDialog;
}
namespace GUI
{
    class QwtCustomPlot;
    class GUIPostDialogAPI GUICurvePlotDialog : public QDialog
    {
        Q_OBJECT
    public:
        GUICurvePlotDialog(QWidget *parent = nullptr);
        ~GUICurvePlotDialog();
        /**
         * @brief 曲线接口添加数据
         * @param[i]   data 所有点的坐标
         * @param[i]   name 曲线名称
         * @author  WangZhenYu (wangzhenyu@diso.cn)
         * @date    2024-11-27 
         */
        void addCurve(QVector<QPointF> data, QString name = "Curve");
        /**
         * @brief 曲线接口添加数据
         * @param[i]   data 所有点的坐标
         * @param[i]   color 曲线颜色
         * @param[i]   name 曲线名称
         * @author  WangZhenYu (wangzhenyu@diso.cn)
         * @date    2024-11-27 
         */
        void addCurve(QVector<QPointF> data, QColor color, QString name);
        void addCurve(QVector<float> xvec, QVector<float>, QColor color, QString name);
        void clearCurves();
        /**
         * @brief 传递列数据
         * @param[i]   yHash 所有列数据
         * @param[i]   colNameList 列名称
         * @param[i]   rowCount 数据总行数
         * @author  WangZhenYu (wangzhenyu@diso.cn)
         * @date    2024-11-27
         */
        void loadTableData(QHash<QString, QVector<float>> &yHash, QList<QString> colNameList,int rowCount);
        void setCaseNames(QStringList caseNames,QStringList datasetNames);
    signals:
        void caseChangedSignal(QString caseName, QString dataSetName);
    private slots:
        void on_comboBoxCaseList_currentIndexChanged(int index);
        void on_comboBoxDataList_currentIndexChanged(int index);
    private:
        Ui::GUICurvePlotDialog *ui;
        /**
         * @brief 二维曲线对象
         * @author  WangZhenYu (wangzhenyu@diso.cn)
         * @date    2024-11-26
         */
        QwtCustomPlot * _qwtCustomPlot{};
        /**
         * @brief y轴数据
         * @author  WangZhenYu (wangzhenyu@diso.cn)
         * @date    2024-11-26 
         */
        QHash<QString, QVector<float>> _yColDatas;
        /**
         * @brief 所有列的名字
         * @author  WangZhenYu (wangzhenyu@diso.cn)
         * @date    2024-11-26 
         */
        QList<QString> _colKeyList;
        /**
         * @brief 工况列表
         * @author  WangZhenYu (wangzhenyu@diso.cn)
         * @date    2024-11-27 
         */
        QStringList _caseNameList{};
        QStringList _dataSetNameList{};
    private:
        void sendUpdateData();
        /**
         * @brief 初始化二维曲线对象
         * @author  WangZhenYu (wangzhenyu@diso.cn)
         * @date    2024-11-26 
         */
        void initPlot();
        /**
         * @brief 按列给表赋值
         * @param[i]   table 表格指针
         * @param[i]   list 列值列表
         * @param[i]   col 列索引
         * @return  是否成功
         * @author  WangZhenYu (wangzhenyu@diso.cn)
         * @date    2024-11-27 
         */
        bool setTableValueByCol(QTableWidget* table, QVector<float> list, int col = 0);
        /**
         * @brief 浮点转字符串
         * @param[i]   iValue 浮点值
         * @return  
         * @author  WangZhenYu (wangzhenyu@diso.cn)
         * @date    2024-11-27 
         */
        QString valueToString(double iValue);
        /**
         * @brief 初始化表头信息
         * @param[i]   table 表格指针
         * @param[i]   title 表头列表
         * @param[i]   col 列数
         * @param[i]   row 行数 
         * @param[i]   defaultValue 初始默认值
         * @author  WangZhenYu (wangzhenyu@diso.cn)
         * @date    2024-11-27 
         */
        void tableInit(QTableWidget* table, QStringList title, int col, int row = 1, QString defaultValue = "0.0");
    };
}


#endif // GUICURVEPLOTDIALOG_H
